In the modern Internet era, web browsers have become a near universal tool that enable people to navigate the Internet. When a user requests to visit a particular website, the browser transmits a request for a particular hypertext markup language (HTML) document from a web server. The web server downloads the requested HTML document to the browser which interprets the HTML for presentation of the web page to the user.
While HTML is quite capable of formatting data, presenting static images, and providing hyperlinks, it is incapable of presenting complex multimedia-type data. In order to accommodate such complex data, a plug-in system was developed for web browsers that enables a web browser to extend its technical capabilities to present other types of complex data types. A plug-in is additional binary native code that extends the basic functionality of the web browser to render different types of content. It typically resides inside the web browser as a code module. Plug-ins may come installed on the browser or may be installed by a user. As the browser reads the HTML from each downloaded web page, specific tags (e.g., <object>, <embed>, etc.) within the HTML invoke a particular plug-in which will then be loaded into the browser to present the piece of sub-content. The plug-in tags in the HTML document will generally also include a uniform resource locator (URL) that directs the browser to the plug-in content that is to be rendered.
The plug-in often defines an instance of a particular media player or provides a codec for interpreting a specific media type. For example, a plug-in may cause an instance of Adobe Systems Incorporated's FLASH® PLAYER to be loaded in the web browser. In the HTML tags embedding the FLASH® PLAYER, a URL may direct the browser to a SWF (small web file) file, which is the native file type for Adobe Systems Incorporated's FLASH® environment. The embedded FLASH® PLAYER will begin playing the SWF file as it is downloaded to the browser. In most applications, the user sees everything as playing directly in the browser.
One problem with the plug-in architecture is that it is only page persistent, meaning that once the user navigates to another web page, the plug-in is closed and all of the plug-in content goes away. If the user were in the middle of a complex multimedia application and accidentally selects the browser “Back” button, the plug-in would stop and all of the information connected with the multimedia application will be lost. On receiving the request to go “Back,” the browser instructs the plug-in code module that it is completed and that the plug-in should unload its content and unload itself as well. When the user returns to that particular web page, the plug-in is reloaded, the content is streamed back to the plug-in, and the application will be re-initialized. The user will then have to restart interaction with the application from the beginning. With the increase in the number of web-based applications that use such plug-in technology, the possibility for a diminished user experience has increased greatly.
In order to address this problem, applications have been developed that periodically save some state of the web application being run on the browser plug-in. In these applications, developers add code to the application that performs the state analysis. The states may be saved in a cookie or in a shared object, which is similar to but more complex and better maintained than a simple cookie. Shared object technology is described in commonly-owned, co-pending U.S. patent application Ser. No. 10/402,352 entitled SHARED PERSISTENT OBJECTS, and commonly-owned, co-pending U.S. patent application Ser. No. 11/263,590, entitled DISTRIBUTED SHARED PERSISTENT OBJECTS, the disclosures of which are incorporated herein. In operation, when the user closes the browser with the plug-in, the data supporting what is being displayed or played in the plug-in is stored in an accessible location. When the user desires to return to the particular web application, the stored data is replayed on the running application which brings the user back to the place where the cookie or shared object was stored. In this type of architecture, both the plug-in instance and the application or content running through the plug-in will still need to be re-initialized before the cookie or shared object is re-loaded therein. This initialization time is computationally time-intensive. Moreover, the state-saving is typically coded into the application, which places the burden of implementation on the application developer. Any existing applications would not be able to operate similarly.